package in.lib.utils;
import java.util.List;
import android.net.Uri;
/**
* URLUtils is used for getting images for things such as youtube videos, maps
* It is also used to convert special image links into the absolute image path
*/
public class URLUtils
{
public static Boolean isImage(Uri uri)
{
List<String> segments = uri.getPathSegments();
return segments.size() > 0 && (hasImageExt(uri)) ||
(containsIgnoreCase(uri.getHost(), "cl.ly") && uri.getPathSegments().size() > 0) ||
(containsIgnoreCase(uri.getHost(), "imgur.com") && uri.getPathSegments().size() > 0 && !uri.getPathSegments().get(0).equals("a") && !uri.getPathSegments().get(0).equals("gallery")) ||
(containsIgnoreCase(uri.getHost(), "i.rbn.im") && segments.size() > 0) ||
(containsIgnoreCase(uri.getHost(), "d.pr") && segments.size() > 1) ||
(containsIgnoreCase(uri.getHost(), "img.ly") && segments.size() > 0) ||
(containsIgnoreCase(uri.getHost(), "bli.ms") && segments.size() > 0 && IntegerUtils.parseInt(uri.getPathSegments().get(0)) > 0) ||
(containsIgnoreCase(uri.getHost(), "instagram.com") && segments.size() > 1) ||
(containsIgnoreCase(uri.getHost(), "instagr.am") && segments.size() > 1);
}
public static boolean containsIgnoreCase(String str, String cmp)
{
return str.toLowerCase().contains(cmp.toLowerCase());
}
public static Boolean hasImageExt(Uri url)
{
return url.getLastPathSegment().endsWith(".jpg") ||
url.getLastPathSegment().endsWith(".jpeg") ||
url.getLastPathSegment().endsWith(".png") ||
url.getLastPathSegment().endsWith(".gif");
}
public static Boolean isYoutubeVideo(Uri uri)
{
return (uri.getHost().endsWith("youtube.com") && uri.getQueryParameter("v") != null) ||
(uri.getHost().endsWith("youtu.be") && uri.getPathSegments().size() > 0);
}
public static String getYoutubeThumbnail(Uri uri)
{
String videoId;
if (uri.getHost().endsWith("youtube.com"))
{
videoId = uri.getQueryParameter("v");
}
else if (uri.getHost().endsWith("youtu.be"))
{
videoId = uri.getPathSegments().get(0);
}
else
{
return uri.toString();
}
return String.format("http://img.youtube.com/vi/%s/mqdefault.jpg", videoId);
}
public static Boolean isMap(Uri uri)
{
return uri.getHost().contains("maps.google") &&
uri.getQueryParameter("q") != null;
}
public static String getMapThumbnail(double lat, double lng)
{
return getMapThumbnail(lat, lng, 600, 300);
}
public static String getMapThumbnail(double lat, double lng, int width, int height)
{
return "http://maps.googleapis.com/maps/api/staticmap?center=" + (lat + "," + lng) + "&zoom=15&size=" + width + "x" + height + "&sensor=false&maptype=roadmap&markers=color:red%7Ccolor:red%7Clabel:A%7C" + (lat + "," + lng);
}
public static String getMapThumbnail(Uri uri)
{
// Api key AIzaSyCMK8EdLvaixCyMf8et4B1lUYHSR7k3tOA
// register under the address romain@getrob.in
String loc = uri.getQueryParameter("q");
return String.format("http://maps.googleapis.com/maps/api/staticmap?center=%s&zoom=13&size=600x300&sensor=false", loc);
}
public static String fixInlineImage(Uri uri)
{
if (hasImageExt(uri)) return uri.toString();
if (containsIgnoreCase(uri.getHost(), "d.pr") && uri.getPathSegments().size() > 1)
{
return "http://" + uri.getHost().replace("www.", "") + uri.getPath().replace("+", "") + ".png?" + uri.getQuery();
}
else if (containsIgnoreCase(uri.getHost(), "img.ly") && uri.getPathSegments().size() > 0)
{
String stub = uri.getLastPathSegment();
return "http://img.ly/show/full/" + stub;
}
else if (containsIgnoreCase(uri.getHost(), "cl.ly") && uri.getPathSegments().size() > 0)
{
return uri.toString() + "/content";
}
else if (containsIgnoreCase(uri.getHost(), "imgur.com") && uri.getPathSegments().size() > 0 && !uri.getPathSegments().get(0).equals("a"))
{
return "http://i.imgur.com/" + uri.getLastPathSegment() + ".png";
}
else if (containsIgnoreCase(uri.getHost(), "bli.ms") && uri.getPathSegments().size() > 0)
{
return "http://bli.ms/" + uri.getLastPathSegment() + "_thumb.jpg";
}
else if (containsIgnoreCase(uri.getHost(), "instagram.com") || containsIgnoreCase(uri.getHost(), "instagr.am"))
{
if (uri.getPathSegments().get(0).equals("p"))
{
String stub = uri.getPathSegments().get(uri.getPathSegments().size() - 1);
return "http://instagr.am/p/" + stub + "/media/?size=m";
}
}
else
{
return uri.toString();
}
return "";
}
}